home *** CD-ROM | disk | FTP | other *** search
- ***************************************************************************
- * UNPACK.LIBRARY V40.56 DOC *
- * *
- * *
- * Update 17-05-95 *
- * *
- * *
- * SAFE HEX INTERNATIONAL *
- ***************************************************************************
-
-
- Welcome to the release version of this library. I hope it's a library you
- can use in your virus killer or whatever you are doing. One of the things
- this library can do, is to help a viruskiller programmer to scan files that
- are crunched.
-
-
- o This library is copyrighted by SHI and may NOT be used in
- commercial programs without a written permission from SHI.
-
- o SHI members can of course use this library for free. (But remember
- to get a written permission.
-
- o All Shareware programmers can be SHI members, if they full-fill to
- support our anti-virus work. (But remember to send your address and
- program idea to SHI, to get a written permission).
-
-
- It's forbidden to reassemble (reverse engining) in any way this library
- code. All the ideas to the way we unpacks files are copyrighted by SHI. If
- you don't respect our copyright - or, if you use this library without a
- written permission, SHI will contact the police to stop you.
-
- Please add the "WantedHelp" (a list containing wanted crunchers for
- update), and remember to credit the author (Thomas Neumann) and SHI in your
- program as stated in the following:
-
- ---------------------------------------------------------------------------
-
- ABOUT SAFE HEX INTERNATIONAL
- If you know a virus programmer you can get a reward of $ 1000 for supplying
- his name and address. The fact is that the law punishes data crime very
- severely. (5 years in jail in most countries).
-
- We are an international group with more than 500 members who have started
- trying to stop the spread of virus. Let me give you some example:
-
- 1. Our motto is: "Safe Hex", who dares do anything else today?".
- 2. A virus bank containing more than 1800 Amiga and PC viruses for
- supporting good shareware antivirus programs.
- 3. We help people to get money back lost by virus infection.
- 4. We write articles about virus problems for about 20 computer
- magazines worldwide.
- 5. We release the newest and the best virus killers around from
- about 25 wellknown programmers worldwide.
- 6. We have more than 35 PC and Amiga "Virus Centers" worldwide
- where you can get free virus help by phoning our "Hotline", and
- the newest killers translated in your own language at very
- little cost.
-
- For more information contact:
-
- SAFE HEX INTERNATIONAL (Please send 2 "Coupon-Response
- Erik Loevendahl Soerensen International" and a self addres-
- Snaphanevej 10 sed envelope, if you want infor-
- DK-4720 Praestoe mation about SHI by letter).
- Denmark
- Phone: + 45 55 99 25 12
- Fax : + 45 55 99 34 98
-
- ---------------------------------------------------------------------------
-
- ***************************************************************************
- * Table of contents *
- ***************************************************************************
-
- unpack.library/upAllocCInfo()
- unpack.library/upDetermineFile()
- unpack.library/upFreeCInfo()
- unpack.library/upFreeFile()
- unpack.library/upLoadFile()
- unpack.library/upNewUnpackNum()
- unpack.library/upSendCmd()
- unpack.library/upTestHunk()
- unpack.library/upUnpack()
- unpack.library/upUnpackList()
- unpack.library/upUnpackListNext()
- unpack.library/upUnuseDrive()
- unpack.library/upUseDrive()
-
- ---------------------------------------------------------------------------
-
- ***************************************************************************
- * Offsets and functions destiptions *
- ***************************************************************************
-
-
- upAllocCInfo(34.0) upAllocCInfo(34.0)
-
-
- NAME
- upAllocCInfo - allocates an info structure.
-
- SYNOPSIS
- info = upAllocCInfo ()
- D0 -30
-
- APTR upAllocCInfo(VOID);
-
- FUNCTION
- upAllocCInfo() allocates an info structure the library uses when it
- unpacks files. You just have to call this function in the beginning
- of your program and then free it again with FreeCInfo() at the end.
- I have made this function, because in future versions of this
- library, the structure will be bigger. Your program will then be
- compatible for any future versions of this library.
-
- INPUTS
- None.
-
- OUTPUTS
- info - is a pointer to the allocated info structure. If there has
- occured an error, a zero is returned.
-
- STRUCTURE
- This is how the Info Structure is build:
-
- STRUCTURE UnpackInfo,0
- APTR UI_Filename
- APTR UI_Path
- APTR UI_Jump
- APTR UI_CruncherName
- APTR UI_DecrunchAdr
- LONG UI_DecrunchLen
- UWORD UI_ErrorNum
- UWORD UI_CrunchNum
- UBYTE UI_CrunchType
- UBYTE UI_Flag
- APTR UI_LoadNamePoi
- LONG UI_CrunchLen
- APTR UI_UserData ;V35+
- APTR UI_TrackJump ;V36+
- APTR UI_TrkErrJump ;V36+
- LONG UI_Offset ;V36+
- UWORD UI_Track ;V36+
- APTR UI_ErrorMsg ;V37+
- APTR UI_CrunchAdr ;V37+
- APTR UI_LhaPattern ;V38+
- BOOL8 UI_UseFilenamePointer ;V39+
-
- ; This Is Private, Do NOT Touch
-
- UBYTE UI_Pad
- LONG UI_CrunchLenTemp
- LONG UI_FileHandler
- LONG UI_Lock
- LONG UI_OldLock
- APTR UI_InfoAdr
- APTR UI_UnpackPoi
- ULONG UI_Temp
- STRUCT UI_Data,4*4 ;V35+
- STRUCT UI_LoadName,128
- STRUCT UI_ExecuteString,256
- LABEL UnpackInfo_SIZEOF
-
-
- NOTE:
- -----
-
- The private area is a bad idea to use, because the different fields
- will maybe be moved around in future versions.
-
-
- UI_Filename is a pointer to the filename you want to scan.
-
- UI_Path is a pointer to a zero-terminated path where the
- library have to unpack archive files, such as a LHA
- archive. Please select a path where you haven't got
- some important data, because ALL files will be
- deleted in the path if the DELETE flag is on.
-
- UI_Jump This is a pointer to your scan routine. If this
- pointer are zero, no jump will be made.
-
- UI_CruncherName This is a pointer to the crunchers name the file is
- crunched with. The name are zero-terminated.
-
- UI_DecrunchAdr This is the start address of the decrunched file.
- Your scan routine just have to read this field and
- the UI_DecrunchLen field and scan that memory.
-
- UI_DecrunchLen This is the length of the decrunched file.
-
- UI_ErrorNum If an error occur, the error number is stored in
- this field. See the unpack.i file for more
- information.
-
- UI_CrunchNum Here is the cruncher number stored. Each cruncher
- has a number so you can find out which cruncher
- there are used on the file.
-
- UI_CrunchType Here is a number that tells about the file
- (archive, data or object file). Bit 7 indicate that
- the file are encrypted. It will be set after the
- call to DetermineFile() function.
-
- UI_Flag You can select some different things the library
- has to do when it tests the file. See below for
- more info.
-
- UI_LoadNamePoi This is just a pointer to the UI_LoadName field.
- Use this if you want to use the UI_LoadName field,
- because the field will be moved in future versions.
-
- UI_LoadName Here is the filename stored, the library is about
- to decrunch, if the file is an archive.
-
- UI_CrunchLen This is the length of the crunched file.
-
- UI_UserData This value will be stored in A1 when the Unpack()
- function jump through the UI_Jump field. (V35+)
-
- UI_TrackJump This field have the same function as UI_Jump, exept
- that the library will only jump through this field
- when its unpack a track crunched file, such as DMS.
- The library will jump for every track it unpacks.
- You have to return a return value in D0. You can
- select between these values: 0 means every thing
- are okay, just continue and -1 means stop
- unpacking. If this field are zero, no jump will be
- made (V36+).
-
- UI_TrkErrJump The library will jump through this pointer if an
- error occurs. There are a lot of errors, such as
- checksum error etc. You routine can read the
- UI_ErrorNum field in the info structure to see what
- went wrong. In D0 you have to return the same
- values as in UI_TrackJump (V36+).
-
- UI_Offset Here will be stored the offset on a disk, ex. if
- the library just have unpacked track 40, there will
- be stored in this field: 40*22*512. You tracksave
- routine can read this field, UI_DecrunchAdr and the
- UI_DecrunchLen fields and just call the SendCmd()
- function with these values as parameters (V36+).
-
- UI_Track Here are stored the track the library just have
- unpacked (V36+).
-
- UI_ErrorMsg If an error occurs, a pointer to the error message
- will be stored here (V37+).
-
- UI_CrunchAdr This is a pointer to the crunched data. If you use
- the NoLoad flag, you have to store the start
- address and the length of the crunched data in this
- field and the UI_CrunchLen field (V37+).
-
- UI_LhaPattern Here can you store a pointer to a Lha pattern. This
- means, the zero-terminated string this pointer
- points to, will be copied at the end of the execute
- string. If you ex. have a string containing: "a#?",
- the unpack.library will only unpack all files
- starting with an "a". Zero in this pointer means no
- pattern (V38+).
-
- NOTE: This pointer will be ignored if you have set
- the UFB_OneFile bit in the UI_Flag.
-
- UI_UseFilenamePointer
- This boolean flag will be set to true, when you
- must use the filename pointed to with
- UI_LoadNamePoi. If false, you have to use you own
- filename. This flag will be set to true when
- unpacking a file in an archive and the file type is
- not an archive. See example (V39+).
-
-
- The flag have the following functions:
-
-
- Name Bit Function
- ---------------------------------------------------------------------------
- UFB_OneFile 0 Select to unpack one file at a time or the whole
- archive. If set, one file is selected.
-
- UFB_Delete 1 Delete files after scanning. Set = Delete. If you
- set this bit on, ALL files AND directories will be
- deleted, not only the files there were stored in
- the archive.
-
- UFB_NoFree 2 If this bit is set, the decrunched file will NOT be
- freed from memory after the Unpack() function have
- called through the UI_Jump pointer. If you set this
- bit, you have to free the memory by yourself with
- the FreeFile() function. (V35+)
-
- UFB_Banner 3 This bit are the give banner bit. If set, you will
- get the banner text in UI_DecrunchAdr. Your routine
- the UI_TrackJump pointer points to, have to test
- the UI_Offset field to see it's a banner or normal
- track there are given. If the UI_Offset are -1, its
- a banner. (V36+)
-
- UFB_NoLoad 4 If this bit are set, the DetermineFile() and
- Unpack() functions will not load the file into
- memory, but use the UI_CrunchAdr and UI_CrunchLen
- field in the Unpack Info structure to get the
- crunched data (V37+).
-
- UFB_Protect 5 If you set this bit and the UFB_NoLoad are cleared,
- the DetermineFile() function will change the
- protections bit on the file to determine. It will
- set the RWED bits (V38+).
-
- 6-7 Reserved
-
- BUGS
- None known.
-
- SEE ALSO
- upFreeCInfo()
-
- ---------------------------------------------------------------------------
-
- upDetermineFile(34.0) upDetermineFile(34.0)
-
-
- NAME
- upDetermineFile - scans a file to find out which cruncher that are
- used.
-
- SYNOPSIS
- success = upDetermineFile (info, filename)
- D0 -42 A0 A1
-
- BOOL upDetermineFile (APTR, char *);
-
- FUNCTION
- upDetermineFile() scans a file to find out which cruncher the file
- are crunched with. If the library can't find out, an error message
- is returned. You have to call this function first, then the
- upUnpack() function, if no error has occured.
-
- INPUTS
- info - is the memory address you got from the upAllocCInfo()
- function.
-
- filename - is a pointer to the filename you want to scan. The
- filename has to be zero-terminated.
-
- OUTPUTS
- success - is an indicator that tells about the operation. If every
- thing is okay, a non-zero value is returned, else a zero
- will be returned. If you get an error, you can look at
- the UI_ErrorNum flag in the info structure to see what
- went wrong.
-
- BUGS
- None known.
-
- SEE ALSO
- upUnpack()
-
- ---------------------------------------------------------------------------
-
- upFreeCInfo(34.0) upFreeCInfo(34.0)
-
-
- NAME
- upFreeCInfo - frees the info structure again.
-
- SYNOPSIS
- upFreeCInfo (info)
- -36 A0
-
- void upFreeCInfo (APTR);
-
- FUNCTION
- upFreeCInfo() frees the info structure again. You have to call this
- function at the end of your program.
-
- INPUTS
- info - is the memory address you got from the upAllocCInfo()
- function. If the memory address is zero, you will NOT take
- a trip to India (and visit the GURU) when you call this
- function.
-
- OUTPUTS
- None.
-
- BUGS
- None known.
-
- SEE ALSO
- upAllocCInfo()
-
- ---------------------------------------------------------------------------
-
- upFreeFile(34.20) upFreeFile(34.20)
-
-
- NAME
- upFreeFile - frees a file from memory.
-
- SYNOPSIS
- upFreeFile (info)
- -84 A0
-
- void upFreeFile (APTR);
-
- FUNCTION
- You have to call this function after you have called the
- upLoadFile() function and are finished with the file. This function
- frees the memory again.
-
- NOTE: You MUST call this function instead of freeing the memory by
- yourself!!
-
- INPUTS
- info - is the memory address you got from the upAllocCInfo()
- function. You can call always this function, even if the
- upLoadFile() function returned an error.
-
- OUTPUTS
- None.
-
- BUGS
- None known.
-
- SEE ALSO
- upLoadFile()
-
- ---------------------------------------------------------------------------
-
- upLoadFile(34.20) upLoadFile(34.20)
-
-
- NAME
- upLoadFile - loads a file into memory.
-
- SYNOPSIS
- success = upLoadFile (info)
- D0 -78 A0
-
- BOOL upLoadFile (APTR);
-
- FUNCTION
- This function allocate some memory with the files length and loads
- the file into it. The filename are taken from the UI_Filename field
- in the info structure. The length and address of the file are
- stored in UI_DecrunchLen and UI_DecrunchAdr.
-
- V36.30:
- -------
- If the library runs under KS 37+, all caches will be cleared after
- the file are loaded into the memory.
-
- INPUTS
- info - is the memory address you got from the upAllocCInfo()
- function.
-
- OUTPUTS
- success - is an indicator that tells about the operation. If every
- thing is okay, the file length is returned, else a zero
- will be returned and the allocated memory will be freed.
- If you get an error, you can look at the UI_ErrorNum flag
- in the info structure to see what went wrong.
-
- BUGS
- None known.
-
- SEE ALSO
- upFreeFile()
-
- ---------------------------------------------------------------------------
-
- upNewUnpackNum(37.32) upNewUnpackNum(37.32)
-
-
- NAME
- upNewUnpackNum - gives the number of unpackers in a structure.
-
- SYNOPSIS
- number = upNewUnpackNum ()
- A0 -108
-
- APTR upNewUnpackNum (void);
-
- FUNCTION
- upNewUnpackNum() counts the number of unpackers the library can
- determine and unpack. You will get two different numbers of
- unpackers. The first one (types) are the numbers of different types
- the library can unpack, example PowerPacker Data, PowerPacker
- Library etc. The second one (unpackers) is the number of unpackers,
- example PowerPacker, Lha, Imploder etc.
-
- INPUTS
- None.
-
- OUTPUTS
- number - a pointer to a structure that look like this:
-
- STRUCTURE NumberStruct,0
- UWORD NS_Version ;Library Version
- UWORD NS_Revision ;Library Revision
- UWORD NS_Types
- UWORD NS_Unpackers
- LABEL NumberStruct_SIZEOF
-
- BUGS
- None known.
-
- ---------------------------------------------------------------------------
-
- upSendCmd(36.30) upSendCmd(36.30)
-
-
- NAME
- upSendCmd - sends a command to a devive.
-
- SYNOPSIS
- error = upSendCmd (dinfo, address, offset, length, cmd)
- D0 -102 A0 A1 D1 D2 D0
-
- UBYTE upSendCmd (APTR, APTR, ULONG, ULONG, UBYTE);
-
- FUNCTION
- The only thing this function does, is send the command with the
- parameters to the device opened by the upUseDrive() function. The
- command will be sent by the DoIO() function.
-
- INPUTS
- dinfo - is a pointer returned by the upUseDrive() function.
-
- address - is a pointer to the data area.
-
- offset - is the offset on the disk.
-
- length - is the number of bytes to send.
-
- cmd - is the command to send, like a read, write or update.
-
- OUTPUTS
- error - is the error number returned by the device.
-
- BUGS
- None known.
-
- SEE ALSO
- upUseDrive(), upUnuseDrive()
-
- ---------------------------------------------------------------------------
-
- upTestHunk(34.1) upTestHunk(34.1)
-
-
- NAME
- upTestHunk - tests the hunk structure in a file.
-
- SYNOPSIS
- success = upTestHunk (address)
- D0 -54 A0
-
- BOOL upTestHunk (APTR);
-
- FUNCTION
- upTestHunk() tests a file for the hunk structure. You have to be
- sure, that the file you want to test is an object file, else this
- routine will return an error. You can check this by look in the
- UI_CrunchType flag in the info structure. You don't need to call
- this function by yourself before you calling the upUnpack()
- function, because the upUnpack() function does that by itself. I'm
- not quite sure it handles the overlay hunk correctly, but it should
- handle it. If you find a file you know are okay and this function
- says it's defect, please send me the file so I can find the error.
-
- INPUTS
- address - is the start address of the file you want to test.
-
- OUTPUTS
- success - is an indicator that tells about the operation. If every
- thing is okay, a non-zero value is returned, else a zero
- will be returned.
-
- BUGS
- None known.
-
- ---------------------------------------------------------------------------
-
- upUnpack(34.0) upUnpack(34.0)
-
-
- NAME
- upUnpack - unpacks the file.
-
- SYNOPSIS
- success = upUnpack (info)
- D0 -48 A0
-
- BOOL upUnpack (APTR);
-
- FUNCTION
- upUnpack() loads the file into memory and unpacks it. When the file
- is unpacked, the library will jump through the UI_Jump pointer to
- your scan routine. If the UI_Jump contains a zero, the library will
- not jump. All what your scan routine has to do, is to get the
- UI_DecrunchAdr and UI_DecrunchLen from the info structure and scan
- that memory. If the file is an archive (Lha, zoo), the library will
- unpack the archive and then read one file at a time and jump to
- your scan routine.
- If you need a password to unpack a file, the library will open a
- little window where it asks for the password. The window will be
- opened on the active screen, so if you open a screen by yourself,
- the window will appear on it (if it's active).
-
- NOTE:
- -----
- After an archive is unpacked and scanned, all the files and
- directories in the path you have selected will be deleted if the
- DELETE flag is on, not just the files there were stored in the
- archive, but ALL files will be deleted, so be sure to use a temp
- directory or something like that.
-
- V35.22:
- -------
- When this function jumps through the UI_Jump pointer, the following
- registers will have these pointers:
-
- A0 = The start address of your routine (Unpack() makes a jsr (a0)).
- A1 = Your pointer stored in the UI_UserData field.
- A4 = The start address of the info structure.
-
- V36.30:
- -------
- If the library runs under KS V37+, all caches will be cleared after
- the decrunching.
-
- Track Crunched Files:
- ---------------------
- This function will jump through UI_TrackJump instead of UI_Jump
- when it unpacks a track crunched file. Such files are ex. a DMS
- file. The routine have to return a value in D0. The values can be
- 0 to indicate that every things are ok and -1 to stop unpacking.
-
- V38.40:
- -------
- This function are now made recursive. That means it will call
- itself until the file can't be decrunched any more. Now it can
- unpack a lha file in a lha file or a file crunched with imploder
- and powerpacker etc. If you have ex. select to unpack a lha file
- at RAM:, the first lha file will be unpacked there. If there are
- more lha files, the next one will be unpacked in RAM:-xxx/ where
- xxx is the name of the lha archive etc.
-
- NOTE:
- -----
- The recursive process will take a lot of stack and memory. Each
- time the function will call itself, it will allocate a new info
- structure and 256 bytes to the new path.
-
- INPUTS
- info - is the memory address you got from the upAllocCInfo()
- function.
-
- OUTPUTS
- success - is an indicator that tells about the operation. If every
- thing is okay, a non-zero value is returned, else a zero
- will be returned. If you get an error, you can look at
- the UI_ErrorNum flag in the info structure to see what
- went wrong.
-
- BUGS
- The DMS Deep decruncher will not work correctly. I try to fix this
- bug as soon as possible.
-
- SEE ALSO
- upDetermineFile(), upAllocCInfo()
-
- ---------------------------------------------------------------------------
-
- upUnpackList(34.1) upUnpackList(34.1)
-
-
- NAME
- upUnpackList - makes an unpacker name list.
-
- SYNOPSIS
- name = upUnpackList (info)
- A1 -66 A0
-
- char * upUnpackList (APTR);
-
- FUNCTION
- upUnpackList() gives a pointer to the first name to a packer the
- library can determine & unpack. You can use this function, if you
- want to make a list over all the unpackers the library can
- determine. Call this function first and then use
- upUnpackListNext().
-
- INPUTS
- info - is the memory address you got from the upAllocCInfo()
- function.
-
- OUTPUTS
- name - is a pointer to a null-terminated string where the first
- name are stored.
-
- BUGS
- None known.
-
- SEE ALSO
- upUnpackListNext()
-
- ---------------------------------------------------------------------------
-
- upUnpackListNext(34.1) upUnpackListNext(34.1)
-
-
- NAME
- upUnpackListNext - reads the next name in the unpacker list.
-
- SYNOPSIS
- success,name = upUnpackListNext (info)
- D0 A1 -72 A0
-
- BOOL,APTR upUnpackListNext (APTR);
-
- FUNCTION
- upUnpackListNext() gives a pointer to the next name to a packer the
- library can determine & unpack. You can use this function, if you
- want to make a list over all the unpackers the library can
- determine. Call the upUnpackList() function first and then use this
- function.
-
- INPUTS
- info - is the memory address you got from the upAllocCInfo()
- function.
-
- OUTPUTS
- name - is a pointer to a null-terminated string where the next
- name are stored.
-
- V37.32
- ------
- This pointer will also be zero when the success flag are
- zero. This are only made for C-programmers.
-
- success - if this contains a zero, there are no more crunchers in
- the list. Otherwise it will contain a non-zero value.
-
- BUGS
- None known.
-
- SEE ALSO
- upUnpackList()
-
- ---------------------------------------------------------------------------
-
- upUnuseDrive(36.30) upUnuseDrive(36.30)
-
-
- NAME
- upUnuseDrive - give back the drive to DOS.
-
- SYNOPSIS
- upUnuseDrive (dinfo)
- -96 A0
-
- void upUnuseDrive (APTR);
-
- FUNCTION
- This function closes the device again and make the drive unbusy.
-
- INPUTS
- dinfo - is the pointer returned by the upUseDrive() function.
-
- OUTPUTS
- Nothing.
-
- BUGS
- None known.
-
- SEE ALSO
- upUseDrive(), upSendCmd()
-
- ---------------------------------------------------------------------------
-
- upUseDrive(36.30) upUseDrive(36.30)
-
-
- NAME
- upUseDrive - make a drive busy and ready for use.
-
- SYNOPSIS
- dinfo = upUseDrive (info, drive)
- D0 -90 A0 A1
-
- APTR upUseDrive (APTR, char *);
-
- FUNCTION
- This function find out which device the drive given uses and open
- it. Then it will make the drive busy, that means CLI/WorkBench will
- not be able to use that drive until you unuse it. It's only you
- that can use it. This function are only made to give you a help to
- write a track crunched-file saver.
-
- INPUTS
- info - is the memory address you got from the upAllocCInfo()
- function.
-
- drive - is a pointer to the drive you want to use, ex. DF0:, RAD:.
-
- OUTPUTS
- dinfo - is a pointer to a structure used by the device. This
- structure includes a IOStdReq structure and a message port
- structure. If you get a zero back, an error occurs. You
- can see in the UI_ErrorNum field to see want went wrong.
-
- BUGS
- None known.
-
- SEE ALSO
- upUnuseDrive(), upSendCmd()
-
- ---------------------------------------------------------------------------
-
- I really hope you can use this library. See also the Unpack.IFF
- file to see how to construct your program.
-
- If you find any bugs in the library or if you have some crunchers
- there are not in the library, please send a bug report or the
- crunchers to me, thanks! See in the "WantedHelp" for more info!
-
-
- WE NEED YOUR HELP TO GET THIS LIBRARY EVEN BETTER, THANK YOU VERY MUCH!
-
-
- Thomas Neumann Member of the SHI Anti Virus Group.
- Kongensgade 78
- 3550 Slangerup
- Denmark
- E-Mail: tax@fiol.nbrock.dk
-